/*
   *  创建图片加载器
   *  @params 图片配置对象
   *   @step 每加载完成一张图片执行的回调函数
   *   @success  加载完成执行的回调函数
   *   @fail  图片加载失败时候的回调函数
   *
   * */
var ImageLoader = function (params,step,success,fail) {
    // 缓存图片数量
    this.bannerNum = params.bannerNum || 0;
    this.itemNum = params.itemNum || 0;
    this.step = step || function () {};
    this.success = success || function () {};
    this.fail = fail || function () {};
    //初始化应用
    this.init();
}
//定义原型方法
ImageLoader.prototype={
    //初始化方法init
    init:function () {
        //计算总数
        this.total = this.bannerNum + this.itemNum;
        this.bannerTotal = this.bannerNum;
        this.itemTotal = this.itemNum;
        //加载这些图片
        this.loader();
    },
    //加载图片的方法
    loader:function () {
        // console.log(222)
        //加载banner图片,图片id可以是0
        while(--this.bannerNum>=0){
            this.loaderImage(this.bannerNum,true);
        }
        //加载item图片
        while(--this.itemNum>=0){
            this.loaderImage(this.itemNum);
        }
        //当值是-1的时候开始加，所以当值是-1的时候还要加回来
        this.bannerNum++;
        this.itemNum++;
    },
    //根据id，生成banner图片的原始地址
    getBannerUrl:function (num) {
        return 'img/banner/banner'+num+'.jpg';
    },
    //根据id，生成item图片的原始地址
    getItemUrl:function (num) {
        return 'img/item/item'+num+'.jpg';
    },
    /*
    * 加载单张图片的方法
    * @num 图片的id
    * @isBanner 是否是banner图片
    *
    * */
    loaderImage:function (num, isBanner) {
        //拼凑地址
        if(isBanner){
            var url  =this.getBannerUrl(num);
        }else {
            var url = this.getItemUrl(num);
        }
        //加载图片
        var img = new Image();
        //图片加载成功时候的回调函数
        img.onload=function () {
            this.updateNum(isBanner);
            //执行step方法
            //当前加载完成的数目，总数目
            this.step(this.bannerNum+this.itemNum,this.total);
            //当全部加载完成之后要执行success
            this.done();
        }.bind(this);
        //监听加载失败
        img.onerror = function () {
            this.updateNum(isBanner);
            this.fail(this.bannerNum+this.itemNum,this.total);
            //当全部加载完成之后要执行success
            this.done();
        }.bind(this);
        //加载图片
        img.src = url;
    },
    //执行成功时候的回调函数
    done:function () {
        if(this.bannerNum+this.itemNum === this.total) {
            this.success(this.total);
        }
    },
    //加载图片，更新num
    updateNum:function (isBanner) {
        //如果是banner图片。加bannerNum
        if(isBanner){
            this.bannerNum++;
        }else{
            this.itemNum++;
        }
    }
}
module.exports = ImageLoader;